// 以数组为例，测试高阶函数

let arr = [3,1,5,9,7] ;
console.log( arr );

let asc = (a,b) => a > b ;
let desc = (a,b) => a < b ;
let rand = (a,b) => Math.random() > 0.5 ;

let comparator = function(a,b){
    if( a > b ) {
        return 1 ;
    } else if( a == b ) {
        return 0 ;
    } else {
        return -1 ;
    }
}

for( let i = 0 ; i < arr.length - 1 ; i++ ){
    for( let j = 0 ; j < arr.length - 1 - i ; j++ ){
        // if( asc( arr[ j ] , arr[ j + 1 ] ) ){ // if( arr[ j ] > arr[ j + 1 ] ){ // 若相邻的两个元素中前面的大于后面的
        // if( desc( arr[ j ] , arr[ j + 1 ] ) ){ // if( arr[ j ] < arr[ j + 1 ] ){ // 若相邻的两个元素中前面的小于后面的
        // if( rand( arr[ j ] , arr[ j + 1 ] ) ) { // if( Math.random() > 0.5 ){
        if( comparator( arr[ j ] , arr[ j + 1 ] ) > 0 ){
            let temp = arr[ j ];
            arr[ j ] = arr[ j + 1 ];
            arr[ j + 1 ] = temp ;
        }
    }
}

arr.sort( comparator ); // 为 sort 传递一个函数作参数

console.log( arr );

console.log( '- - - '.repeat(10) );

let names = [ '郑成功' , '朱元璋' , '郭子仪' , '马本斋' , '霍去病' ] ;

names.forEach( e => console.log( e ) );

names.sort( (a,b) => Math.random() - 0.5 );

names.forEach( e => console.log( e ) );